package negocio.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class Disciplina implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private long id;
	
	@NotEmpty
	private String nome;
	
	private String horario;
	
	private String local;
	
	private String semestre;
	
	@Min(0)
	private int numVagas;
	
	private boolean status;
	
	@Min(0)
	@Max(100)
	private int mediaAprovacao;
	
	private String descricao;
	
	@Temporal(TemporalType.DATE)
	private Date dtInicio;
	
	@Temporal(TemporalType.DATE)
	private Date dtFim;
	// ------------------relacionamentos---------------------//
	@ManyToOne
	private Usuario professor;
	
	@OneToMany(mappedBy="disciplina", fetch=FetchType.LAZY)
	private List<TopicoDiscussao> topicosDiscussoes = new ArrayList<TopicoDiscussao>();
	
	@OneToMany(mappedBy="disciplina", fetch=FetchType.LAZY)
	private List<Atividade> atividades = new ArrayList<Atividade>();
	
	@OneToMany(mappedBy="disciplina", fetch=FetchType.LAZY)
	private List<Conteudo> conteudos = new ArrayList<Conteudo>();
	
	@OneToMany(mappedBy="disciplina", fetch=FetchType.LAZY)
	private List<Prova> provas = new ArrayList<Prova>();

	// ------------------- gets e sets ---------------------//
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getHorario() {
		return horario;
	}

	public void setHorario(String horario) {
		this.horario = horario;
	}

	public String getLocal() {
		return local;
	}

	public void setLocal(String local) {
		this.local = local;
	}

	public int getNumVagas() {
		return numVagas;
	}

	public void setNumVagas(int numVagas) {
		this.numVagas = numVagas;
	}

	public boolean getStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public int getMediaAprovacao() {
		return mediaAprovacao;
	}

	public void setMediaAprovacao(int mediaAprovacao) {
		this.mediaAprovacao = mediaAprovacao;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDtInicio() {
		return dtInicio;
	}

	public void setDtInicio(Date dtInicio) {
		this.dtInicio = dtInicio;
	}

	public Date getDtFim() {
		return dtFim;
	}

	public void setDtFim(Date dtFim) {
		this.dtFim = dtFim;
	}

	public Usuario getProfessor() {
		return professor;
	}

	public void setProfessor(Usuario professor) {
		this.professor = professor;
	}

	public List<TopicoDiscussao> getTopicosDiscussoes() {
		return topicosDiscussoes;
	}

	public void setTopicosDiscussoes(List<TopicoDiscussao> topicosDiscussoes) {
		this.topicosDiscussoes = topicosDiscussoes;
	}

	public List<Atividade> getAtividades() {
		return atividades;
	}

	public void setAtividades(List<Atividade> atividades) {
		this.atividades = atividades;
	}

	public List<Conteudo> getConteudos() {
		return conteudos;
	}

	public void setConteudos(List<Conteudo> conteudos) {
		this.conteudos = conteudos;
	}

	public List<Prova> getProvas() {
		return provas;
	}

	public void setProvas(List<Prova> provas) {
		this.provas = provas;
	}

	public String getSemestre() {
		return semestre;
	}

	public void setSemestre(String semestre) {
		this.semestre = semestre;
	}
	
	
		
}
